# 案例：定义Person类，默认拥有 姓名，年龄，性别，家庭住址， 吃法，睡觉，说话
      # 1. 定义子类 Student， 有学号， 学习
      # 2. 定义子类 Teacher， 工资， 讲课
      # 3. 定义子类 Doctor，  级别， 做手术

# 定义父类
class Person:

    def __init__(self,name,age,gender,address):
        self.name = name
        self.age = age
        self.gender = gender
        self.address = address

    def eat(self):
        print(f'我叫{self.name},我喜欢吃饭')

    def sleep(self):
        print(f'我叫{self.name},我喜欢睡觉')

    def speak(self):
        print(f'我叫{self.name},我喜欢说话')


# 定义学生类
class Student(Person):
    def __init__(self,stuId,name,age,gender,address):
        self.stuId = stuId # 自己独有的属性
        super().__init__(name, age, gender, address) #继承的父类的属性

    def study(self):
        print(f'我叫{self.name}，我爱学习')

    def __repr__(self):
        return f'Student(stuId={self.stuId},name={self.name},age={self.age},gender={self.gender},address={self.address})'

    # 定义老师类
class Teacher(Person):
    def __init__(self,name,age,gender,salary,address):
        super().__init__(name,age,gender,address)
        self.salary = salary

    def teach(self):
        print(f'我叫{self.name} ，我正在上课')

class Doctor(Person):
    def __init__(self,name,age,gender,rank,address):
        super().__init__(name,age,gender,address)
        self.rank = rank

    def cut(self):
        print(f'我是医生{self.name}，我在做手术')

if __name__ == '__main__':
    s1 = Student(15,'刘千琪',18,'女','吉林长春')
    print(s1)
    s1.study() # 调用子类的方法
    s1.eat() # 调用父类的方法


    print('=' * 30)
    t1 = Teacher('张纪豪',32,'男','15000','北京朝阳')
    t1.teach() # 调用自己的方法
    t1.speak() # 调用父类的方法

    print('=' * 30)
    d1 = Doctor('李时珍',38,'男','主任医师','湖北蕲春')
    d1.cut()
    d1.speak()